/**
 * @description 嵌套在平面阵列中递归地链接族谱的对象。
 * @param {*} items 
 * @param {*} id: 省略第二个参数ID，默认为null，指示对象未链接到另一个对象（即它是顶级对象）。
 * @param {*} link: 省略第三个参数，链接，将 parent_id 作为默认属性，其通过其ID将对象链接到另一个。
 */
const nest = (items, id = null, link = 'parent_id') => 
  // 使用 Array.prototype.filter() 过滤 id 与链接匹配的 item。
  items.filter(item => item[link] === id)
  // 使用 Array.prototype.map() 将每个项映射到具有子属性的新对象，该属性递归地嵌套项目的项目是当前项的子项。
  .map(item => ({ ...item, children: nest(items, item.id, link) }));

// 例子
const comments = [
  { id: 1, parent_id: null },
  { id: 2, parent_id: 1 },
  { id: 3, parent_id: 1 },
  { id: 4, parent_id: 2 },
  { id: 5, parent_id: 4 }
];
const nestedComments = nest(comments);
// [{ id: 1, parent_id: null, children: [...] }]
